﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects.DataClasses;
using System.Web;
using SmsVotes.Core.Utils;

namespace SmsVotes.DataAccess
{
    public abstract class BaseManager
    {
        /// <summary>
        /// Контекст фреймворка, хранится в сессии
        /// </summary>
        protected static SMSServiceEntities EFContext
        {
            get
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
                if (context.Session["EFContext"] == null)
                {
                    SMSServiceEntities efContext = new SMSServiceEntities();
                    context.Session["EFContext"] = efContext;
                    return efContext;
                }
                else
                    return (SMSServiceEntities)context.Session["EFContext"];
            }
        }
        /// <summary>
        /// Сохраняет сделанные в контексте изменения
        /// </summary>
        public static void Save()
        {
            try
            {
                EFContext.SaveChanges();
            }
            catch (Exception ex)
            {
                Log.WriteException(ex);
                throw;
            }
        }
        /// <summary>
        /// Удаляет сущность
        /// </summary>
        /// <param name="entity"></param>
        public static void Delete(EntityObject entity)
        {
            EFContext.DeleteObject(entity);
        }
        /// <summary>
        /// Сбрасывает текущий контекст из сессии и создает новый
        /// </summary>
        public static void Reset()
        {
            System.Web.HttpContext context = System.Web.HttpContext.Current;
            var efContext = context.Session["EFContext"] as SMSServiceEntities;
            if (efContext != null)
                efContext.Dispose();

            context.Session["EFContext"] = new SMSServiceEntities();
        }

    }
}
